﻿using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using System.Data.SqlClient;
using System.Diagnostics;

using System.Data.OleDb;

namespace KornyezetVedelem
{
    /// <summary>
    /// Summary description for DAL.
    /// </summary>
    public abstract class DAL
    {
        protected static bool kapcsolodva;
        protected static bool ConnectionCreated;

        //ebben a projektben egy SQL szerveren futo adatbazishoz akarunk csatlakozni
        //SQL adatbazishoz SqlConnection objektumokkal kapcsolodhatunk
        protected static SqlConnection mySqlConn;

        //kapcsolati karakterlanc: szerver neve, adatbazis neve(az 5-6.laborfeladathoz tartozo adatbazis) , kapcsolodas modja
        protected string strSqlConn = "MultipleActiveResultSets=True;Data Source=ALPY-LAPTOP\\SQLEXPRESS;Initial Catalog=master;Integrated Security=SSPI";

        //parancsobjektum-ezek segitsegevel tudunk SQL utasitasokat vegrehajtani
        //parancsobjektumok a kapcsolati objektumok segitsegevel tartanak kapcsolatot 
        //az adatbazissal
        protected System.Data.SqlClient.SqlCommand myComm;
        //a kovetkezo ket objektum segitsegevel az adatbazisbol adatokat olvashatunk be
        //illetve tarolhatjuk ezeket
        protected System.Data.SqlClient.SqlDataReader myDataReader;
        protected System.Data.DataSet myDataSet;

        //igaz, ha a kapcsolat letrejott-a szarmaztatott osztaly konstruktoraba kell
        protected bool IsConnectCreated()
        {
            return ConnectionCreated;
        }

        protected bool IsConnected()
        {
            return kapcsolodva;
        }

        protected System.Data.SqlClient.SqlConnection theConnection()
        { return mySqlConn; }

        //kapcsolatot teremt az adatbazissal, ha ez meg nem tortent meg eddig 
        protected bool MakeConnection()
        {
            // Create the Connection if is was not already created.
            if (ConnectionCreated != true)
            {
                try
                {
                    //uj OleDbConnection objektum letrehozasa
                    //ezzel a konstruktorral letrehoztuk a kapcsolati objektumot es beallitottuk a ConnectionString
                    //tulajdonsagat is
                    //ez csak akkor allithato be, ha a kapcsolati objektum zarva van
                    mySqlConn = new SqlConnection(strSqlConn);
                    //kapcsolodunk az adatbazishoz
                    mySqlConn.Open();
                    ConnectionCreated = true; //logikai valtozo-igaz, ha a kapcsolat letrejott
                    //be is zarjuk a kapcsolatot-igyekeznunk kell minel kevesebb ideig nyitva hagyni a kapcsolatot,
                    //mert igy sporolunk az adatbazis eroforrasaival
                    mySqlConn.Close();
                    kapcsolodva = false;
                    //igazat terithetunk vissza, hisz a kapcsolat gond nelkul letrejott
                    return true;
                }
                catch
                {
                    return false;
                }
            }
            else { return true; }
        }

        //vegrehajtja az elso parameterben megadott stringben levo select utasitast
        //egy eredmenyhalmaz jon letre ezaltal, melyet egy DataReader objektumban tarolunk el
        //es teritunk vissza
        protected SqlDataReader myExecuteReader(string sQuery, ref string ErrMess)
        {
            try
            {
                this.OpenConnection();//megnyitja az adatbazis-kapcsolatot, ha meg nincs megnyitva) 

                //uj sqlcommand objektumot igy is letrehozhatunk:
                //sQuery-tartalmazza az SQL utasitast, melybol adatot kerunk le
                //mySqlConn-SqlConnection objektum 
                myComm = new SqlCommand(sQuery, mySqlConn);
                //myComm OleDbCommand CommandText tulajdonsagat atkuldi a myAccesConn
                //connectionnek es letrehoz egy DataReadert

                //ExectuerReader tagfgv-olyan select utasitasok vegrehajtasara szolgal, melyek
                //eredmenyhalmazt adnak vissza-az eredmenyhalmaz egy DataReader objektumban ter vissza
                // myComm.BeginExecuteNonQuery();
                 myDataReader = myComm.ExecuteReader();
                 //this.CloseConnection();
                ErrMess = "OK";
                return myDataReader;

            }
            catch (SqlException e)
            {
                ErrMess = e.Message;
                this.CloseConnection();
                return null;
            }
        }

        protected DataSet myExecuteReader_D(string sQuery, ref string ErrMess)
        {
            try
            {
                this.OpenConnection();//megnyitja az adatbazis-kapcsolatot, ha meg nincs megnyitva) 

                //uj sqlcommand objektumot igy is letrehozhatunk:
                //sQuery-tartalmazza az SQL utasitast, melybol adatot kerunk le
                //mySqlConn-SqlConnection objektum 
                myComm = new SqlCommand(sQuery, mySqlConn);
                //myComm OleDbCommand CommandText tulajdonsagat atkuldi a myAccesConn
                //connectionnek es letrehoz egy DataReadert

                //ExectuerReader tagfgv-olyan select utasitasok vegrehajtasara szolgal, melyek
                //eredmenyhalmazt adnak vissza-az eredmenyhalmaz egy DataReader objektumban ter vissza
                // myComm.BeginExecuteNonQuery();
                ErrMess = "OK";
                SqlDataAdapter dataAdapter = new SqlDataAdapter(sQuery,mySqlConn);
                DataSet dataSet = new DataSet();
                dataAdapter.Fill(dataSet, "Tablak");
                CloseConnection();
                return dataSet;
            }
            catch (SqlException e)
            {
                ErrMess = e.Message;
                this.CloseConnection();
                return null;
            }
        }

        /// <summary>
        /// Open the Connection when the state is not already open.
        /// </summary>
        protected bool OpenConnection()
        {
            // Open the Connection when the state is not already open.
            if (kapcsolodva != true)
            {
                try
                {
                    mySqlConn.Open();
                    kapcsolodva = true;
                    return true;
                }
                catch
                {
                    return false;
                }

            }
            else { return true; }
        }

        //bezarjuk a kapcsolatot, ha meg nyitva van
        internal void CloseConnection()
        {
            // Close the Connection when the connection is opened.
            if (kapcsolodva == true)
            {
                mySqlConn.Close();
                kapcsolodva = false;
            }
        }
        public int getMaximumId(string sSQL)
        {
            int max;
            bool ok = MakeConnection();
          
            SqlDataAdapter dataAdapter = new SqlDataAdapter(sSQL, mySqlConn);
            DataSet dataSet = new DataSet();
            dataAdapter.Fill(dataSet, "Tablak");
           
                max=1;
                try
                {
                    max = Convert.ToInt16(dataSet.Tables["Tablak"].Rows[0][0]);
                }
                catch (Exception ex)
                {
                    max = 0;
                }
            CloseConnection();
            return max;
        }
        public void beszuras(string sSQL)
        {
            CloseConnection();
            bool ok = MakeConnection();
            SqlDataAdapter dataAdapter = new SqlDataAdapter(sSQL, mySqlConn);
            mySqlConn.Open();
            dataAdapter.InsertCommand = new SqlCommand(sSQL, mySqlConn);
            dataAdapter.InsertCommand.ExecuteReader();
            mySqlConn.Close();
            CloseConnection();
           
        }
        public void beszuras_proc(string sSQL)
        {
            CloseConnection();
            bool ok = MakeConnection();
            SqlDataAdapter dataAdapter = new SqlDataAdapter(sSQL, mySqlConn);
            mySqlConn.Open();
            dataAdapter.SelectCommand = new SqlCommand(sSQL, mySqlConn);
            dataAdapter.SelectCommand.ExecuteReader();
            mySqlConn.Close();
            CloseConnection();

        }
        public Exception Torles(string sSQL)
        {

            Exception ex = null;
            bool ok = MakeConnection();
            SqlDataAdapter dataAdapter = new SqlDataAdapter(sSQL, mySqlConn);
            mySqlConn.Open();
            dataAdapter.DeleteCommand = new SqlCommand(sSQL, mySqlConn);
            try
            {
                dataAdapter.DeleteCommand.ExecuteReader();
            }
            catch (Exception ex1)
            {
                ex = ex1;
            }
            mySqlConn.Close();
            CloseConnection();
            return ex;
        }
        public Exception Torles_Telepulesek(int id)
        {

            Exception ex = null;
            bool ok = MakeConnection();
          
            mySqlConn.Open();
            SqlCommand command = new SqlCommand("proc_4", mySqlConn);
            command.CommandType = CommandType.StoredProcedure;
            command.Parameters.Add("@Id", SqlDbType.Int).Value = id;
            SqlDataAdapter adapter = new SqlDataAdapter(command);
            
            try
            {
              
                command.ExecuteNonQuery();
            }
            catch (Exception ex1)
            {
                ex = ex1;
            }
            mySqlConn.Close();
            CloseConnection();
            return ex;
        }
        public void modositas(string sSQL)
        {
            bool ok = MakeConnection();
            SqlDataAdapter dataAdapter = new SqlDataAdapter(sSQL, mySqlConn);
            mySqlConn.Open();
            dataAdapter.UpdateCommand = new SqlCommand(sSQL, mySqlConn);
            dataAdapter.UpdateCommand.ExecuteReader();
            mySqlConn.Close();
            CloseConnection();

        }
        public void Beszuras_Telepulesek(String Nev,String megye,String idele)
        {

            Exception ex = null;
            bool ok = MakeConnection();

            mySqlConn.Open();
            SqlCommand command = new SqlCommand("proc_3", mySqlConn);
            command.CommandType = CommandType.StoredProcedure;
            command.Parameters.Add("@Nev", SqlDbType.NVarChar, 50).Value = Nev;
            command.Parameters.Add("@Megy", SqlDbType.NVarChar, 50).Value = megye;
            command.Parameters.Add("@Idele", SqlDbType.NVarChar, 50).Value = idele;

            SqlDataAdapter adapter = new SqlDataAdapter(command);

            try
            {
                command.ExecuteNonQuery();
            }
            catch (Exception ex1)
            {
               
            }
            mySqlConn.Close();
            CloseConnection();
            }
        public void Modositas_Telepulesek(int Id,String Nev, String megye, String idele)
        {

            Exception ex = null;
            bool ok = MakeConnection();

            mySqlConn.Open();
            SqlCommand command = new SqlCommand("proc_5", mySqlConn);
            command.CommandType = CommandType.StoredProcedure;
            command.Parameters.Add("@Id", SqlDbType.Int).Value =Id;
            command.Parameters.Add("@Nev", SqlDbType.NVarChar, 50).Value = Nev;
            command.Parameters.Add("@Megy", SqlDbType.NVarChar, 50).Value = megye;
            command.Parameters.Add("@Idele", SqlDbType.NVarChar, 50).Value = idele;
            SqlDataAdapter adapter = new SqlDataAdapter(command);
            try
            {
                command.ExecuteNonQuery();
            }
            catch (Exception ex1)
            {

            }
            mySqlConn.Close();
            CloseConnection();
        }
    }
}